String StringBuffer StringBuilder区别
Introduction
如题,本文将要介绍String
、StringBuffer
以及StringBuilder
的区别。首先要申明的是,他们的区别不大。
String
String是一个不变对象(immutable[一旦创建不可以改变])
创建的String对象被保存在常量池中(Constant String Pool)
像String这样的不可变对象都是现成安全的1
2
3
4
5
6String demo = " hello " ;
// “hello”对象存储在常量池,该对象不可修改
demo="Bye" ;//新的String对象“Bye”也保存在常量池中,demo指向这个新建的变量
// String对象“hello”在常量池中仍然存在,他的值没有被覆盖,只是我们丢失了指向他的变量罢了。
StringBuffer
StringBuffer是可变的意思是:可以改变该对象的值。
StringBuffer对象呗保存在堆中(heap)
每个StringBuffer的方法都是synchronized
StringBuffer是线程安全的1
2
3
4StringBuffer demo1 = new StringBuffer("Hello") ;
// 以上对象被保存在堆中,能够修改他的值。
demo1=new StringBuffer("Bye");
// 上述语句修改了demo1的值。demo1中的原值“Hello”被替换
StringBuilder
StringBuilder基本和StringBuffer相同。主要区别就是StringBuilder是不是线程安全的;正由于他不是是线程安全的,所以速度要比StringBuffer要快。
总结
String | StringBuffer | StringBuilder | |
---|---|---|---|
存储区域 | 常量池 | 堆 | 堆 |
是否可修改 | 不可修改 | 可修改 | 可修改 |
线程安全 | 安全 | 安全 | 不安全 |
表现 | 快 | 慢 | 快 |
参考链接
原文见链接http://javahungry.blogspot.com/2013/06/difference-between-string-stringbuilder.html